iT邦幫忙

2021 iThome 鐵人賽

DAY 15
0
自我挑戰組

Android 初新者系列 第 15

Day15 - BMI計算機

  • 分享至 

  • xImage
  •  

BMI(身體質量指數)是用自己身高、體重的比例,來當作是否過胖的「身高體重指數」
它的計算方法也很簡單
BMI = 體重(公斤)/身高平方(公尺)
台灣人體重習慣以公斤為單位所以沒問題
但要注意的是台灣身高幾乎都以公分為單位,這邊需要把公分轉為公尺再來做計算
人的標準BMI是介於18.5≦BMI<24之間
我們就來用之前學過得技術
做出BMI計算機八

開始

我們需要的元件有:
TextView x 3 (體重(公斤) x1 、身高(公分) x1 、診斷結果)
Button x 1 (計算 x1)
EditText x 2 (體重輸入欄 x1 、身高輸入欄 x1)
使用者輸入身高時,只需要以公分輸入,我們會寫程式把公分轉為公尺,好讓用戶方便使用
我們先把頁面刻好
id設置:
體重的EditText:et_weight
身高的EditText:et_height
計算的Button:btn_cale
顯示結果的TextView:tv_result
這邊要注意:必須把EditText的inputType設成number
這樣才不會有輸入數字之外的字

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <TextView
            android:layout_width="0dp"
            android:layout_weight=".2"
            android:layout_height="wrap_content"
            android:text="體重kg:"
            android:textAlignment="center"
            android:textSize="15dp"/>
        <EditText
            android:id="@+id/et_weight"
            android:layout_width="0dp"
            android:inputType="number"
            android:layout_weight=".8"
            android:layout_height="wrap_content"/>
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <TextView
            android:layout_width="0dp"
            android:layout_weight=".2"
            android:layout_height="wrap_content"
            android:text="身高cm:"
            android:textAlignment="center"
            android:textSize="15dp"/>
        <EditText
            android:id="@+id/et_height"
            android:layout_width="0dp"
            android:inputType="number"
            android:layout_weight=".8"
            android:layout_height="wrap_content"/>
    </LinearLayout>
    <Button
        android:id="@+id/btn_cale"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="計算"/>
    <TextView
        android:id="@+id/tv_result"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:textSize="30dp"
        android:text="BMI:"
        android:textAlignment="center"/>

</LinearLayout>

MainActivity.java

除了體重、身高的TextView不用宣告外,其餘的皆會使用到,所以必須宣告
並且抓取物件

EditText et_weight = findViewById(R.id.et_weight);
EditText et_height = findViewById(R.id.et_height);
Button btn_cale = findViewById(R.id.btn_cale);
TextView tv_result = findViewById(R.id.tv_result);

不管事抓EditText的值,或是最後BMI的結果都是再按下按鈕後才會執行
所以把所有的程式都寫在按鈕點擊事件內就好

btn_cale.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {

    }
});

先抓到EditText體重和身高的值
運算BMI:體重(公斤)/身高平方(公尺)顯示BMI的值
然後判斷你BMI顯示過高或過低

package com.example.bmi;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import java.text.NumberFormat;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        EditText et_weight = findViewById(R.id.et_weight);
        EditText et_height = findViewById(R.id.et_height);
        Button btn_cale = findViewById(R.id.btn_cale);
        TextView tv_result = findViewById(R.id.tv_result);

        btn_cale.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(et_weight.getText().length()!=0||et_weight.getText().length()!=0){
                    float weight = Float.parseFloat(et_weight.getText().toString());
                    float height = Float.parseFloat(et_height.getText().toString());
                    float bmi = weight/((height/100)*(height/100));
                    NumberFormat numberFormat = NumberFormat.getInstance();
                    numberFormat.setMaximumFractionDigits(2);
                    tv_result.setText("BMI:"+numberFormat.format(bmi));
                    if(bmi<18.5){
                        tv_result.setText(tv_result.getText()+"\n太瘦");
                    }
                    else if(bmi>=24){
                        tv_result.setText(tv_result.getText()+"\n太胖拉");
                    }
                    else if (bmi<24&& bmi>=18.5){
                        tv_result.setText(tv_result.getText()+"\n完美體態");
                    }
                }
                else{
                    Toast.makeText(MainActivity.this,"請輸入身高/體重",Toast.LENGTH_SHORT).show();
                }

            }
        });
    }
}

執行結果:
https://ithelp.ithome.com.tw/upload/images/20210923/20141769uva0s0sOnC.png


上一篇
Day14 - Button外傳
下一篇
Day16 - RadioButton(一)
系列文
Android 初新者30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言